//
//  HMUserAccount.swift
//  Weibo
//
//  Created by xiongminghua on 16/7/22.
//  Copyright © 2016年 熊明华. All rights reserved.
//

import UIKit

/// 用户账号模型
class HMUserAccount: NSObject, NSCoding {
    
    // 模型属性
    
    /// AccessToken,用于获取用户数据
    var access_token: String?
    
    /// access_token的生命周期，单位是秒数
    var expires_in: NSTimeInterval = 0 {
        
        didSet{
            // 将生命周期转换为 过期时间
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
        
    }
    
    
    // 添加一个过期时间的属性, 方便后面比较
    var expiresDate: NSDate?
    
    /// 授权用户的UID
    var uid: String?
    
    /// 传入一个字典，实现字典转模型
    init(dict: [String: AnyObject]) {
        
        // 字典转模型, 但是如果属性很多，就很麻烦，所以用下面的方法赋值
//        access_token = dict["access_token"] as! String
//        expires_in = dict["expires_in"] as! NSTimeInterval
//        uid = dict["uid"] as! String
        super.init()
        
        // 使用KVC给属性赋值
        setValuesForKeysWithDictionary(dict)
        
    }
    
    // 需要实现以下下面的方法，否则会报错,里面不用写什么
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    // 对象打印
   override var description: String {
        
        get {
            return "access_token: \(access_token), expires_in: \(expires_in), uid: \(uid), expiresDate: \(expiresDate)"
        }
    }
    
    // MARK: - 归档和解档模型数据
    // 解档， 从沙盒中读取模型数据
    required init?(coder aDecoder: NSCoder) {
        
        access_token = aDecoder.decodeObjectForKey("access_token") as? String
        expires_in = (aDecoder.decodeObjectForKey("expires_in") as? NSTimeInterval)!
        uid = aDecoder.decodeObjectForKey("uid") as? String
        expiresDate = aDecoder.decodeObjectForKey("expiresDate") as? NSDate
        
        super.init()
    }
    // 归档，将模型数据保存到沙盒
    func encodeWithCoder(aCoder: NSCoder) {
        
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expires_in, forKey: "expires_in")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(expiresDate, forKey: "expiresDate")
        
    }
    

}
